package com.ant.collect.controller;

import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import cn.hutool.core.codec.Base64;
import com.ant.collect.common.ResultVo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

/**
 * 验证码接口控制器
 */
@RestController
@RequestMapping("/captcha")
public class CaptchaController {

    /**
     * 生成验证码图片
     * 前端调用示例：<img src="/api/captcha/generate" @click="refreshCaptcha" />
     */
    @GetMapping("/generate")
    public ResultVo generateCaptcha(HttpSession session) {
        // 1. 创建验证码（宽120，高40，4位字符，2条干扰线）
        LineCaptcha captcha = CaptchaUtil.createLineCaptcha(100, 40, 4, 2);
        // 2. 获取验证码文本，存入 Session（用于后续验证）
        String code = captcha.getCode();
        session.setAttribute("captchaCode", code);
        session.setMaxInactiveInterval(5 * 60); // 5分钟有效期

        // 3. 将验证码图片转换为 Base64 字符串
        try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
            captcha.write(outputStream); // 写入输出流
            byte[] imageBytes = outputStream.toByteArray();
            // Base64 编码（带前缀 "data:image/png;base64,"，前端可直接用于 img src）
            String base64Str = "data:image/png;base64," + Base64.encode(imageBytes);
            // 4. 返回结果（封装成统一响应格式）
            return ResultVo.success("获取验证码成功", base64Str);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return ResultVo.fail("获取验证码失败");
    }


//    /**
//     * 生成验证码图片
//     */
//    @GetMapping("/generate")
//    public void generateCaptcha(HttpServletRequest request, HttpServletResponse response) throws IOException {
//        // 1. 创建验证码对象（宽120，高40，4位字符，2条干扰线）
//        LineCaptcha captcha = CaptchaUtil.createLineCaptcha(120, 40, 4, 2);
//
//        // 2. 获取验证码文本（用于后续验证）
//        String code = captcha.getCode();
//
//        // 3. 将验证码存入Session（键为"captchaCode"，有效期默认跟随Session）
//        HttpSession session = request.getSession();
//        session.setAttribute("captchaCode", code);
//
//        // 4. 设置响应类型为图片，避免乱码
//        response.setContentType("image/png");
//        // 禁止浏览器缓存验证码图片
//        response.setHeader("Pragma", "no-cache");
//        response.setHeader("Cache-Control", "no-cache");
//        response.setDateHeader("Expires", 0);
//
//        // 5. 将验证码图片写入响应流
//        captcha.write(response.getOutputStream());
//    }
}